/*
    kOTF Open Trace Format - a library for generating execution traces.
    Copyright 2012 Daniel K. O.

    kOTF is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    kOTF is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with kOTF.  If not, see <http://www.gnu.org/licenses/>.
*/

#ifndef KOTF_RECORDS_H
#define KOTF_RECORDS_H

#include <kotf/Types.hpp>

namespace kotf {

    enum SpecialId {
        InvalidId = 0 ///< Used to indicate the id is not valid
    };

    /**
      Note: the record types have public non-const members so they can be easily
      accessed and copied (integers and strings are cheap to copy), although
      you should prefer passing references around.
      Do not change the fields unless you want to make things not to work.
     */

    /// handle to refer to states
    struct State {
        uint64_t id;
        string name;
        State();
        State(uint64_t i, const string& n);
    };

    /// handle to refer to counters
    struct Counter {
        uint64_t id;
        string name;
        Counter();
        Counter(uint64_t i, const string& n);
    };

    /// handle to refer to channels
    struct Channel {
        uint64_t id;
        string name;
        Channel();
        Channel(uint64_t id, const string& n);
    };
}


#endif
